C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, m+ l# u9 I  J2 b$ S
main文件:
( t. E3 @( Q7 q$ ]3 C9 T' A4 hinterrupt void interrupt4(void)  ' F$ g8 S0 T- i
{
4 V  k: i: d$ V/ S( g  Uint32 sample;; [/ m. E4 w+ l+ V

* h* j0 a# O6 G4 |  sample = input_sample(); // read L + R samples from ADC
8 w; {  X( F; s, Z2 l9 J  output_sample(sample);   // write L + R samples to DAC
- V3 i8 f8 p6 F  return;
1 k- ]; z$ }. U' ~) l}
# F# A# @& w4 Q1 m$ K. c" C! g: o% u) i
int main( void )8 V2 {3 ?# a9 l' i. F
{9 A+ x8 U) B; K1 P: X5 x8 d% M" ~

9 A/ Z: P  _/ b& v    /* Initialize BSL */
+ [- w9 y% y2 }) o    EVMC6747_init( );( D( D" `- H; l. _
        /* Call evmc6747_intr function */% D' D2 s. O) n7 s8 S9 V) [6 u4 q
    aic3106_init( );
% T$ g" g5 h5 a- H: b% C: H        while(1);
7 v2 `, U% `! u! ^6 V! s; p}
9 f5 a" b8 [) O* K0 V! T, \7 \' E( O( d' o$ T% `5 p
. d" M( {, e# o. a
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% U; k; E" G9 \; O% N/* Initialize MCASP1 */
: y3 x; Y: N2 D$ X    mcasp = &MCASP_MODULE_1;7 |$ K% y5 i  D& X3 u$ o1 f, U. ~
    mcasp->regs->GBLCTL  = 0;       // Reset' x; e4 w5 Y- E  g; m: u, S
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 W" ^4 y3 F9 C6 E& c: K    mcasp->regs->XGBLCTL = 0;       // Reset TX3 f6 r! b1 M! K6 f$ E/ _5 q+ C
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 U. N8 f; N# {2 h) e   // configure McASP0 receive registers
9 [( @9 y# N* b1 E4 d$ |; T* E    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ V6 L: _/ [" G5 w2 W: D! i    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ v' f  ~! W4 \- h$ I/ P; J    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ w( i2 J+ y4 U4 n/ \6 j0 j0 q* b* R1 v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 r; f! _5 U/ {; J4 Q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& g6 B  U. m6 I6 G8 a! l    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 B# w2 }$ O2 w& f' z3 H    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* z! l# z* u: M. F    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: e+ U0 {% f% L8 x/ J
$ @9 t$ C7 Y, r4 Z$ q+ T" f) M4 ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) u) K5 h2 r2 S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; I, q* Z7 \( h    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) J9 Y- M" K- F
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 J" b# W% h9 L5 n0 w0 L    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- f1 T$ {! _; Y' T
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 ~& k! R  C+ K" B6 z: v# X6 J! ]% |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! b2 d; g" z3 z9 D9 d) x8 Y+ \$ b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  ?9 @5 b4 U0 G6 l
4 |# I/ U' R# @) K' K; G. p8 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 g" d  [' Y' A# N/ W) E
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ r/ X) Q0 ^2 e, R3 e
    mcasp->regs->PFUNC      = 0;          // All MCASPs* j4 e# Y! P$ Y( g2 ^7 N  E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 W2 |, H5 u8 M
& y4 F2 e3 t; q. J3 }
    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 E' S. e! B3 V: r; b    mcasp->regs->DLBCTL     = 0x00000000; // Not used# e* u6 w" }* A8 g8 [
    mcasp->regs->AMUTE      = 0x00000000; // Not used; |' c1 v, w2 E9 B. C! c- t+ U
2 z6 E# S1 \; S2 |
/* Starting sections of the McASP*/1 w, M0 ~8 Z1 `# P$ v6 D( Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % a9 D  k- H  O4 V/ p7 ?& X1 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- q! ]0 L1 }) T$ M% h7 m* X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) ^+ ^- d/ \2 D1 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ p* U/ U3 c( R9 Y' e" G) S# X  u3 T; D+ p/ U- I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 i; ~- k% e/ |8 r+ h+ ]$ p; S& H2 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 ]% x  L1 Q7 Y* G9 e$ V- W3 ?7 P    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + U+ c% N1 _6 [. D" T. U/ W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 Q- F4 r" m, i; Z* c- p$ d2 ^; }) r0 U! p* K1 B; ^
    mcasp->regs->XSTAT = 0x0000ffff;
. r* g+ r1 y. a" s! v    mcasp->regs->RSTAT = 0x0000ffff; ! m1 q. D' ^& l0 {

, C. p. W  h1 H; h    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
+ f0 a$ y6 D* w" u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 B) x5 C5 w3 e7 m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & @3 A; b. @( N( K- T/ J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# R; e  g' X8 {+ a( n
* B7 [" ]; d9 i* k" s8 f4 L, _    /* Write a 0, so that no underrun occurs after releasing the state machine */$ y! F* @4 q/ Q
    mcasp->regs->XBUF5 = 0;9 l' q! r* C$ ^+ s: G
    mcasp->regs->RBUF0 = 0;  h+ A2 y8 i! k! Y. B
7 p+ f# t9 ^8 c5 d
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! N5 o& o0 A% Z( G* T! H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 G: _2 u, q" N5 F+ d5 }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
% H8 G- E3 Y# }! j' u5 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 f& A( Y+ R: D, d- O. [
8 f  E8 |; x7 Q9 a# A    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ d9 I# ^0 j, e9 ~# y: J, Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" j" z6 T4 R. M! W4 L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ v9 F$ t3 A2 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 Q0 M1 Q/ ^  }5 z6 s6 [0 f. ^3 _, p
$ n) A/ N# }+ W) Z* c8 o& G
    CSR = 0x0000;
$ F0 A/ @! _0 r0 W- H    INTC_INTMUX1 = 0x3d;9 u: W& Y& f" |' W2 @' \
    ISTP = (unsigned int)vectors;
. Z1 [  N! |. X- b    ICR = 0xFFF0;  
$ J4 w" y8 r- c& E5 t0 `    IER |= 0x12;  
+ H8 \2 i* N& z' G$ k3 ^" Q    CSR |= 0x01;  / y& w5 b1 N/ s, L! K+ N  y+ i

+ g5 Q4 |8 i  }$ Z& E' b
/ L- H6 l! G* h+ x, \$ A
' |0 `4 W' I; n) d( P$ v$ T& H还有就是两个输入输出函数:, h5 E# W# X8 c; V) U7 ]
void output_sample(Int32 out_data)
0 s; S0 |8 c' m% ^{1 m: U" h/ q+ h
  AIC31_data.uint = out_data;  
4 H2 p) H( G5 n! Z) ]; ^, e: M& e  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ J7 L7 r8 ], R+ P) P: ]7 Q/ \* Z}
* S! w. |' u0 g: {4 W: V' R* Y/ p/ e- J/ N' W; h! n2 W6 D
Int32 input_sample(void)
* c( k, l. Y& C8 m; P% w2 O{  4 u& q8 t/ J' X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% z# z1 [7 x5 t8 f4 u  return (AIC31_data.uint);
6 S: _, G+ H% S5 r/ V}
5 f; ^7 z9 M/ y! J% j
8 a) q/ C: b. C: Q1 j: M
分享到:  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, 2026-2-5 00:52 , Processed in 0.041413 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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