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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" f+ M) \% I. i7 F+ |main文件:' J: B3 d3 {) W/ ^0 x2 E/ O
interrupt void interrupt4(void)  + x( w" T- I+ x' b: P8 r
{; @4 F( w4 v2 T1 p3 ]! B$ t% \
  Uint32 sample;" v4 L4 T' L: _; V2 j! G
) i/ A' r' _: v+ }4 N8 e
  sample = input_sample(); // read L + R samples from ADC$ |( U2 j) o8 o% j; q  R
  output_sample(sample);   // write L + R samples to DAC 0 h2 t& U5 V2 _1 l: N1 R
  return;, [* p2 s% i( Y& \5 K8 ^
}% @$ `; h; N$ y3 K, T, K0 ]
) {3 t6 Q( H, ?
int main( void )
9 D# U$ ^( Y; k/ L) @{
) i$ Y. P# V0 u; L* X1 P; c5 y- r, I% n1 G
    /* Initialize BSL */  K1 c, T# ~5 V( u5 J: i
    EVMC6747_init( );
( z- S& }; F0 u$ E, i9 w        /* Call evmc6747_intr function */$ u! `9 n5 ?' S8 Q+ J% x  L# S9 h% z3 B# Y
    aic3106_init( );* z7 S) n& |! H9 \) [
        while(1);
$ r/ ^5 Z* @3 J1 D# M4 J}! t) y+ M% l$ D5 |3 v3 Q- s6 `

$ x4 f7 h1 N6 J" Z
% B( ?6 Z1 X$ @8 z6 W' Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! }7 H* S, {: z8 K" w
/* Initialize MCASP1 */9 F1 D$ e' J7 g; l6 O3 N- p
    mcasp = &MCASP_MODULE_1;: M  Z" j: W* O# X+ t6 G# F% |( E* m
    mcasp->regs->GBLCTL  = 0;       // Reset
% g! [( M) L, {& e# C8 C9 e    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ Z" K7 k2 N5 i- [- h& b/ ~    mcasp->regs->XGBLCTL = 0;       // Reset TX% D$ `& \6 A$ Y: [
    mcasp->regs->PWRDEMU = 1;       // Free-running' H& W3 f" A" p  ~+ b  X
   // configure McASP0 receive registers5 {, ]' g' n9 n& N! L' A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 R. Q9 c4 e# ]' t8 P7 a
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( m7 ^* }2 P3 A) d1 `. t: L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* `& k: Q" b3 v" V* Q1 s% y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" [! p+ u3 D9 s8 s: r& Y4 {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 A/ l' F! q/ b( Y" r
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: o  O3 {2 k8 q) J    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ d4 P' D, ?# H3 T* z# u* c/ O
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. x) G, A8 q! j8 p# H% \- v
& N  [9 ?! k8 X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 c+ X) v9 d6 u  K$ F% {2 J
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, b- u7 c; Z! J4 t" y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  J0 S- h  u$ T% ?- G    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! p/ R! a- D; ]" w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 g0 x3 I+ R# e% W5 s% ?    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, k1 o- V% K& K9 g( t) F
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, L) M2 h* Q: F4 F3 o! ^    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' q2 c. Z0 v# t4 c( d0 Y% a4 w

, F6 Q% o) N2 K  M2 [    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& }# k! k8 a! Z' F5 L  U9 i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 R$ l+ D$ e# }6 ]) p' v# n
    mcasp->regs->PFUNC      = 0;          // All MCASPs/ A: E( [6 M: W2 ?2 K/ a+ w) Q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, S$ O' D4 }0 A! w4 b4 X" \
& @4 L+ N+ Y& y$ f9 T    mcasp->regs->DITCTL     = 0x00000000; // Not used
% [0 e( h  o/ b; {6 D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 Q4 k4 |4 d& {    mcasp->regs->AMUTE      = 0x00000000; // Not used
: I) h- `/ G* y! ?
. r0 L' z% j% `/ W/* Starting sections of the McASP*/
4 T7 v; c: b# x" Y1 |7 F    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 `. c; Q8 u- j( M2 E( D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 g! G7 Z9 z9 V5 c  n$ w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
  ^  I1 ]$ P2 [4 {" P% t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) V' ]0 ?; s1 {0 h5 _5 \0 F$ }) W7 l' K+ @6 v$ D- j* q: |
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ A$ I8 u8 g9 m. R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; B% J6 _5 ], m  \7 l+ N    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 P$ C  ^. V' l/ K- f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 d- Z  z! G6 N) N/ l" Q& Z' d

  T* ]5 Q# o! `    mcasp->regs->XSTAT = 0x0000ffff; " b9 ]8 H, ]4 Q
    mcasp->regs->RSTAT = 0x0000ffff; + c3 r% j& D; l. D9 y
- J9 [  ~; v+ T9 c8 q& Y! {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* c& d/ u( }% Q$ }; ^( e  f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 X0 o/ Q- V- [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( q9 d- C6 I9 a* G+ r& l3 x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- C3 Q3 N% w$ M( c9 o* o$ ]; j% X, D8 t: T- v( P4 x
    /* Write a 0, so that no underrun occurs after releasing the state machine */0 O1 W& ?- l' Q
    mcasp->regs->XBUF5 = 0;
! t+ O4 |! a* P& g8 c  F    mcasp->regs->RBUF0 = 0;
% U  a& D4 k' c3 F0 C& B
% d2 k% T$ t" ^) _    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
( ^/ c" D9 Q& I$ J! o: ]( }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. L! @* y" K; V! d$ E) l' {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 [. I0 a# _) d3 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 H) G" _  R0 f% f: i& H
8 x# d4 ~* y: c5 v! ~  I1 j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " ~5 h/ e  M2 ~/ A. {, M+ `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. @+ u# Y$ h5 K. \# q: M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : m5 _; B3 i" q$ _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );5 B- \, j  ?% `. N1 L" ?
) E; q' R) V: E
    CSR = 0x0000;( v  ~; F5 Q6 h
    INTC_INTMUX1 = 0x3d;
3 i' ~1 X2 o* f: f6 D- i- S0 ^    ISTP = (unsigned int)vectors;. L& [3 c& h  Y3 v  N
    ICR = 0xFFF0;  
0 x/ Q9 b5 c. X, i  r. B, R    IER |= 0x12;  . P4 y: A1 E# p, l  J1 x' e
    CSR |= 0x01;  ' F9 D9 h  \" n- O/ c7 w! o

) _3 _. y( n% ^  S
5 l, R. J: g8 o  u0 h4 k
+ Q' P1 J! m( l# d  r还有就是两个输入输出函数:
3 d! ^0 Z2 x& v# e0 Mvoid output_sample(Int32 out_data)0 V5 c4 J7 ^) Q9 p
{
- V" F0 r9 w& S7 d/ ^/ ~; A  AIC31_data.uint = out_data;  & O  u) K# E7 n3 i9 K+ {
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 a6 f, w# h+ C( k2 O" z}
  F6 j+ h7 d/ L9 L' H
  i8 X2 Z% T2 Z$ GInt32 input_sample(void)& c& _1 `0 `! ~$ s- Z" N" X
{  
' L8 _6 C: X4 G1 i6 Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 n/ i9 X* H6 {/ ?, U; J# Y/ t  return (AIC31_data.uint);2 t/ K8 B' z, s0 u
}# y  q% L1 u9 u  N* F& s0 q

; z2 o4 D; X+ c( [, t
分享到:  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-1-18 14:13 , Processed in 0.042038 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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