C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5523|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ O" m2 m" Z+ f$ Nmain文件:8 Q( L5 S/ o$ Z1 S. |: h
interrupt void interrupt4(void)  
7 Y+ {* E8 g# i: R/ D0 W/ O# N{
- e! b" L5 }( F: R0 R  Uint32 sample;0 Z+ [3 U: _. ]% o* P  v- [

' \7 T6 d6 d+ L* r) ^" ~/ f  sample = input_sample(); // read L + R samples from ADC
7 M* C/ D9 R( ~; V0 Z# F  J  output_sample(sample);   // write L + R samples to DAC & @* @7 D% {, f  F! G% }
  return;+ X( t4 S* L9 L+ O. t3 c
}- i. u& B- A: O0 P1 u2 b' @) h
) F9 {3 P) L8 p6 j6 \, ?, ?! I) I/ ~
int main( void )5 I7 R; H6 g" T7 C
{
, d7 g/ I* |9 H2 l+ F+ H) E
6 y! O2 h. Q& Z    /* Initialize BSL */+ i6 U5 |- B9 t" P: l4 o: N
    EVMC6747_init( );
" q/ f/ L4 P. v( F, L: g$ }        /* Call evmc6747_intr function */
: g5 a+ b/ E" [) `0 L  w' ?1 j* t    aic3106_init( );% P! X0 x) i6 y( g1 u
        while(1);
# `2 _% T& ]2 H2 u' y: x}% n- x5 B) s- S5 B, s

# g! w1 b- A- L# o1 b
( V; q& }. u  x% Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 Y4 A3 [/ n" Z$ L
/* Initialize MCASP1 */
' T  H3 P6 z- v$ o! `8 J1 ?4 s    mcasp = &MCASP_MODULE_1;6 d! X' s0 C1 o" X
    mcasp->regs->GBLCTL  = 0;       // Reset& V' V) z/ A' |+ Q! g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ K1 q! n  h! {0 A! w    mcasp->regs->XGBLCTL = 0;       // Reset TX
% F) J. v4 m7 @% H/ @0 P9 N4 y    mcasp->regs->PWRDEMU = 1;       // Free-running1 Y% p# \) C, I" N3 B
   // configure McASP0 receive registers* t; E( q6 w# q8 {& J; N
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& `% X0 W5 ?+ |: _- O& r
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 Z, ]4 i- n" `6 l5 B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# j: k8 u7 ?2 O( H  w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)$ Y7 ^% X5 p" C" W& C& r* S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 ?& |2 d4 Y+ ]. m! B% {* r1 z    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# {( U$ ^3 o/ @: G    mcasp->regs->RINTCTL    = 0x00000000; // Not used
, a  n3 f' l* U1 G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ |" Z5 t+ W- d
0 U/ ^! q; U- @# g5 p) u& N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. ~, J& m4 g" M3 `8 b$ o    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ z  d: i6 N6 ]. C" D
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ C/ l) L& ~) k# t% P
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, H' s0 u; y, T' p  U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ M' @* G) Z, A; l    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- Z4 s( U0 {6 L) n# I* f
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% B1 x7 p- t1 U6 f4 o: e1 L* }. I$ D    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; I" a  y0 d. v. w
! L1 B; c: r" @  x/ D2 H    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( Y( ^0 z7 `& z- S7 ?% l  d
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, ~4 w4 I7 R* s! d+ l    mcasp->regs->PFUNC      = 0;          // All MCASPs9 C0 x- s) `1 t: X% S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# B3 b3 g3 \) y% f; @0 Q: q# r- S0 v
    mcasp->regs->DITCTL     = 0x00000000; // Not used
" e) s" g3 ^& s: Z9 T' ^7 e    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 g$ x0 ^( k- y- n( [
    mcasp->regs->AMUTE      = 0x00000000; // Not used
) U( `; G& E% v" t
2 u" g, ^- Z3 G6 u+ r/ F/* Starting sections of the McASP*/5 L# {6 M0 X6 _' ^4 y; V1 ]6 N
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! v$ N: R( ^- J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : H8 X0 x/ e8 A8 i' s
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' R$ ^" d$ @: h0 u  n2 q3 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( F5 }  u& P5 J6 w* p, V5 A% i4 x8 _/ _7 x; n' ~' n
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! k4 f) n7 e9 r# x0 N) ?9 I/ O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 {. D6 M* H$ r- k/ W    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * [  ]  ~8 M# t  @5 N2 g6 b8 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 w0 m8 `8 P1 }4 x3 {# O/ @3 s# G6 c  O
    mcasp->regs->XSTAT = 0x0000ffff;
# I! D9 i% K0 L    mcasp->regs->RSTAT = 0x0000ffff; ) Q; X- g4 ~( ^! F' z0 i
# Z6 Z' M% m0 C& y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( F6 `8 ?( D4 _0 b+ Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 f2 ^5 w" G9 r1 i$ b! R! U
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( x, Q, B7 l9 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ C/ H$ O8 w  y+ Z4 N, C& G+ ?
% O( m0 O4 x7 W    /* Write a 0, so that no underrun occurs after releasing the state machine */
" R7 y3 A' D  h8 H    mcasp->regs->XBUF5 = 0;
* T7 q9 m  X) x" X    mcasp->regs->RBUF0 = 0;: I; C; F! W% W1 F) z& ~7 t

& r) w2 n; j* ~- i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 t9 M: B" t0 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) W7 t5 t' x; o, I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) W2 y4 \! ~$ \( g# p8 q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( G, `- |+ N- ~! f0 D  ~( I* n9 I0 [4 s: b( p$ b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& q0 ^  B, O1 W! N+ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ o9 v2 s! X9 i! \* V  M
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. }- c4 Z1 Z* `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! D! G: ^4 O6 T8 M7 V

+ s2 {; q& g5 E) X, f- N4 J    CSR = 0x0000;
- |# j9 x# O2 k9 a    INTC_INTMUX1 = 0x3d;
/ `3 M( D" v; ]8 Z% G    ISTP = (unsigned int)vectors;" A7 R! ~6 x4 u; o: m+ `' ~  ?$ ]8 i' p' d
    ICR = 0xFFF0;  
3 {& j- Y6 W& Y6 b    IER |= 0x12;  
6 u$ B" G; T! H; y    CSR |= 0x01;  5 D! d) g8 P$ f3 C
* N) F9 k8 `* a# X

% F* g+ n, X7 \. j& ]6 p1 c7 R" p, [; N0 z7 U5 _) W* @
还有就是两个输入输出函数:0 ~' s: D2 N* R2 I
void output_sample(Int32 out_data)5 B" ?3 [) Q( B
{
3 L0 a+ O' Z0 R  E: l  AIC31_data.uint = out_data;  
, ~* P9 ]# i. R4 }. |% Y2 ^  U  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" `7 K( k  D, V3 t9 P3 \/ T3 R2 F}
* P# k) n3 T5 m) T
- ~; A3 X* P' J3 I4 `* ^Int32 input_sample(void)
6 M, k4 z8 p! c. a{  % `% b+ q/ J+ g& j1 m, [8 n/ J! Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 n, e  j1 c: q5 v+ q2 L  return (AIC31_data.uint);+ e6 G* G4 }: \" h& u/ P/ c
}
9 h3 |) J- o. q* D  D# \2 w+ u+ V
6 v$ l, p$ M5 C2 S. f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-11-21 00:07 , Processed in 0.041763 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表