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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 d* m/ D5 d( u; r. K& p4 g
main文件:; i' J7 ~  ]3 u3 ?- P- Q+ N
interrupt void interrupt4(void)  
8 `+ e* w9 D8 A% Z, k; ?{: g% E; b5 U& d: A" \7 {- ~
  Uint32 sample;3 @' n; X) `  C% v: F) Q' D3 g

* s( ]/ x8 f  L% B2 @  sample = input_sample(); // read L + R samples from ADC
" [3 p9 I; i$ s8 V( \9 y$ P# a: ^  output_sample(sample);   // write L + R samples to DAC / U+ J: |0 n2 \+ E. {
  return;
1 }7 u' F% x( p. F% |3 o}; N6 _0 t3 I" b0 y+ K
6 D, J. ^  l* l5 u5 t+ W+ e7 W
int main( void )+ n. S6 e7 l9 `6 [$ N9 ?: T
{2 t  E5 Y  n& I

! S7 d4 ]% [, I5 E- `- O' t) Q2 v    /* Initialize BSL */
$ S$ M$ L4 z% E8 B& q; i# S3 J    EVMC6747_init( );
" ^* O7 s6 K# t# R1 m5 r        /* Call evmc6747_intr function */
+ p, p' ]8 y" L6 Z; l$ t    aic3106_init( );
( S1 X9 n0 P$ B        while(1);/ k2 y/ d% `1 I5 y8 L1 c
}
8 c$ x# p' G& N4 p6 O$ B& T
3 j1 z* b9 d# [* [- ]
; w; v" [8 _9 }& v& Paic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* B1 d; a- N3 J% L0 X, n
/* Initialize MCASP1 */1 U1 Z9 _! F( O% ^4 C8 u
    mcasp = &MCASP_MODULE_1;, O) g1 g" c. o8 o
    mcasp->regs->GBLCTL  = 0;       // Reset- k% ]( t# ]& U& s% c+ m
    mcasp->regs->RGBLCTL = 0;       // Reset RX) Y; ?# x7 i# V% I9 t) A$ t
    mcasp->regs->XGBLCTL = 0;       // Reset TX8 ]$ \. e) B  Y' Q6 a
    mcasp->regs->PWRDEMU = 1;       // Free-running
" J0 @  f7 q! M# }0 x$ g  J   // configure McASP0 receive registers0 n% {' o# T& l/ ~( u/ n& Z7 Z# P+ w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! X  c0 @5 U, E5 g+ O* C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _0 z( s$ A" u9 p" X5 {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) t  p+ C3 B( J+ K+ Q9 M$ o3 Q# O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* j# @3 V( @1 |. @7 Z( v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 s" M  B! ^: j& r4 i' V! G. Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ M. b: V+ ?" h5 Z# z$ P# `* ?9 L    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* o( X/ ?% o! a    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 R; h: D) w  Z  P! w2 |8 `

) w+ ~0 |, Y' ~( s" t, K% L2 N- v    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 s: p: n4 b/ {! o9 R( u1 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 X4 u1 B8 q4 D; T. _$ i8 I    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 I- J: l; B) c4 S9 C2 P& d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 o8 `7 o- J) \) M& n8 t! w0 e    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) ~9 R/ [. I, V/ m+ P; Z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' V; s+ d, e& |$ u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 |$ G0 `1 {0 e# ?( i/ C" g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 h7 N5 Z, {* I
4 s$ ]5 l0 d4 k$ V: r$ t
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- c' i( G0 M) r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 r* }+ Q9 J+ ~8 E1 S0 n% T, u7 y
    mcasp->regs->PFUNC      = 0;          // All MCASPs. E9 f  p' g& C! N% u  U5 U7 {+ @
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. x0 [2 ]  X3 c& U# E
4 P/ t2 u5 Y8 ?; N' r( |
    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 j% K( c1 e- ]- K" h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, |5 j% [5 h5 E' Q: Z    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 e7 Y$ t. n5 [) z
& |2 S$ c% d' i7 K6 @/* Starting sections of the McASP*/, y! Z4 _0 x# U) z) m$ R" n
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; : L. H0 A; Z/ b3 w, F' }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( A3 n/ y# a( ]6 Q1 i+ _5 _: I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 g0 s% Q3 u# t  G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' r9 N0 D; p4 N0 C# c0 y

" N6 y, G7 Y& X- g    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# B: G# z/ @4 Y4 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 l/ ^6 X5 h' E3 [3 l3 d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) U* |* Z7 _  S8 ?" ^$ K2 j0 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 Z- s1 x, Z# l9 m
8 U$ w2 D6 G) D  Q    mcasp->regs->XSTAT = 0x0000ffff; 5 Y6 p/ Q2 v6 L4 p& V! |4 c- U
    mcasp->regs->RSTAT = 0x0000ffff; # ]5 ^9 ]# T) }" i
( F9 w) P) R1 Q) {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 y1 ~, G7 {9 W5 q/ R2 x7 _4 Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 p1 X6 ]0 k; a# c- J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ! N2 M- A# ~) S3 [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 |4 O* _! W% Z: v) z

% B6 e2 F2 g4 S- @# F5 {    /* Write a 0, so that no underrun occurs after releasing the state machine */
0 z. G5 t, m5 g3 p8 Y) d) z    mcasp->regs->XBUF5 = 0;
( L  D2 Z" n; f    mcasp->regs->RBUF0 = 0;
& I7 o: T( D6 E% g1 [. d3 V
, _8 O' R6 I! y% i: [( B7 b1 E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 \, s6 \; c3 L7 k$ |: ?) k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 W; p, [% L+ ?+ h6 ]- U
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. ^: I; A) s! z  {  A7 b  F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! Y( }: [5 K( x, }: z
5 G7 D4 z/ C7 [7 i0 A7 R' v. o    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 Y- V5 O. O5 Y! M2 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# A# B7 ]; `8 [+ O; Q: r3 F    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 \9 @: v+ Z4 H1 A8 r6 e8 I' a% J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ ]( l& `4 r4 ^/ G8 [
  Q% P6 m2 v9 U- G' n* z1 q    CSR = 0x0000;
9 ?! l9 i  A( W1 J' U    INTC_INTMUX1 = 0x3d;  u0 Z& Z! y7 a+ ^6 H
    ISTP = (unsigned int)vectors;9 F! M1 q( h5 l) ~3 n
    ICR = 0xFFF0;  
* F$ k' I" _8 a& v    IER |= 0x12;  0 j5 M; \- F& n3 i3 T" \
    CSR |= 0x01;  / U+ y5 I/ R: a8 Q
1 W# G& R; {( a* E+ X9 R: B
! d% Y; i$ v/ x- s. U

* z% k* j- k- {  s  s+ U还有就是两个输入输出函数:
9 P3 \" i5 G+ ~$ S5 D" vvoid output_sample(Int32 out_data)
5 t2 _) q7 Y4 _& p{# {( O9 x7 V, w0 \3 D, ^
  AIC31_data.uint = out_data;  
3 Y8 D5 O. t! g$ k  MCASP1_XBUF5_32BIT = AIC31_data.uint;; e7 B2 `6 V  I0 N8 m0 H% E
}
5 ^/ d( E, }. Q, Q7 g1 {7 ^$ V6 F9 n% N- @* n" h& B4 s1 c; l
Int32 input_sample(void)
' e8 Z$ h  n2 k. _: J( k{  , \1 F0 I" F# e8 d1 Y  k; ?8 J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 Z: q5 d7 J/ E* r- }: V
  return (AIC31_data.uint);/ u( w7 |- ^7 k% n- t9 M
}0 T% r/ o0 P8 ^6 Z& p

& m  L" @" {4 b( y: \) u) u2 p7 [
分享到:  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-21 04:14 , Processed in 0.042314 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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