2012-08-04 20 views
5

Câu hỏi này đã được trả lời cho x86 tuy nhiên, tôi không thể tìm thấy nhiều về cpu ARM MP như Cortex-A9, Cortex-A15 vv ...Làm thế nào để ngắt làm việc trên CPU ARM đa lõi

Quan trọng hơn i muốn biết nếu ngắt có thể được nâng lên trên cpu không chính mà không có bất kỳ cấu hình, vv

Tôi đang làm việc trên một phần mềm chỉ giao dịch với cpu chính do đó tôi đặt phần còn lại trong trạng thái WFI. làm việc trên cpus MP cánh tay, Có thể là cpu chính tiếp tục thực hiện mã và một trong những cpu thứ nhặt nó lên và nhảy vào hướng dẫn trong bảng vectơ và thực thi mã đó?

btw đây là mã tôi đang sử dụng để đặt chúng sang chế độ điện năng thấp

uint32_t reg; 

    __asm__ volatile("mrc p15, 0, %0, c0, c0, 5" : "=r" (reg)); 
    reg &= 0xF; 

    if(reg > 0) 
     goto spin; 

<code snipped> 

spin: 
    for(;;) 
     cpu_idle(); // cpu_idle -> wfi 
+0

bạn đã xem ARM ARM và TRM cho mpcore chưa? –

+0

Có, nó đề cập đến vài điều về GIC và cách thức hoạt động của IPI nhưng không có gì về cách các ngắt chung được lên lịch. – sgupta

Trả lời

6

ngắn và cho các mục đích thực tế câu trả lời đúng là những gì bạn yêu cầu không thể thực hiện mà không cần một số cấu hình được thực hiện trên các lõi thứ ...

Kiến trúc bộ điều khiển ngắt được mô tả (trong một số chi tiết khá) trong http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ihi0048b/index.html

để chuẩn bị các lõi trung học để nhận IPIs, bạn cần phải:

  • Kích hoạt tính năng phân phối GIC (một lần, đối với toàn bộ hệ thống)
  • Kích hoạt giao diện CPU GIC (cho mỗi lõi)
  • Kích hoạt tính năng IPIs bạn muốn nhận (cho mỗi lõi)
  • Đặt các ưu tiên cho mỗi IPI bạn muốn nhận (cho mỗi lõi)
  • Đảm bảo giao diện CPU Ngắt ưu tiên Mặt nạ Ưu tiên (cho mỗi lõi) được đặt ở mức ưu tiên thấp hơn (số cao hơn) so với mức ưu tiên ngắt bạn đã đặt ở trên.
  • Xóa CPSR I-bit (cho mỗi lõi)

Nếu bạn không có ý định thực hiện một xử lý ngắt, bỏ qua thanh toán bù trừ của I-bit. Cốt lõi sẽ ra khỏi WFI và tiếp tục thực hiện. Đó là bình thường những gì bạn muốn cho một hoạt động khởi động hệ thống.

+0

Đối với việc phân phối các gián đoạn tới các lõi không phải là lõi chính, các bộ ghi mục tiêu bộ xử lý gián đoạn chỉ định lõi nào nhận được từng ngắt ngoại vi dùng chung. – unixsmurf

+0

vì vậy trừ khi tôi rõ ràng rõ ràng các bit I trong CPSR của lõi thứ cấp, ngắt sẽ được đeo mặt nạ và WFI nên giữ chúng ở chế độ năng lượng thấp mãi mãi phải không? WFE cũng đánh thức lõi trên một gián đoạn? vì vậy nếu một phần mềm sau khi khởi động của riêng tôi nó sẽ có thể thức dậy những lõi từ WFI? Do đó tôi đang nghĩ đến việc sử dụng WFE nhưng trên một bộ xử lý, chúng tôi không có bất kỳ lõi nào khác để gửi tín hiệu nếu chúng ta đang ở trong WFE, do đó, chỉ muốn đảm bảo ngắt kết nối lõi từ WFE – sgupta

+0

Nopes. Những gì tôi bit là ngăn chặn việc gián đoạn được thực hiện (chuyển đổi chế độ/nhảy vào vector). Với bit tôi đặt lõi sẽ vẫn đi ra khỏi trạng thái năng lượng thấp, nhưng nó sẽ chỉ tiếp tục thực hiện các hướng dẫn sau khi WFI trong chương trình. Có, ngắt cũng đánh thức các lõi trong WFE. Nhưng nếu bạn đang nghĩ đến việc sử dụng SEV/WFE như một sự thay thế cho các IPI, bạn cần phải xem xét thực tế của việc phân phối không bảo đảm. – unixsmurf